关闭MongoDB服务的几种方法 您所在的位置:网站首页 mongodb fork 关闭MongoDB服务的几种方法

关闭MongoDB服务的几种方法

#关闭MongoDB服务的几种方法| 来源: 网络整理| 查看: 265

https://blog.csdn.net/github_38885296/article/details/80619191

MongoDB 提供几种关闭服务的命令

使用 mongod 命令关闭

 [mongo@redhatB data]$ mongod  --shutdown  --dbpath /database/mongodb/data/

killing process with pid: 17747

使用 kill 命令

 [mongo@redhatB data]$ ps -ef | grep mongo

root     17573 14213  0 05:10 pts/1    00:00:00 su - mongo

mongo    17574 17573  0 05:10 pts/1    00:00:00 -bash

mongo    18288     1  0 06:12 ?        00:00:00 mongod -f /database/mongodb/data/mongodb_27017.conf

mongo    18300 17574  6 06:13 pts/1    00:00:00 ps -ef

mongo    18301 17574  0 06:13 pts/1    00:00:00 grep mongo

备注:可以使用操作系统的 kill 命令,给 mongod 进程发送 SIGINT 或 SIGTERM 信号,

即 "kill -2 PID," 或者 “kill -15 PID“。

            建议不要使用 ”kill -9 pid“,因为如果 MongoDB 运行在没开启日志(--journal)的情况下,

            可能会造成数据损失。

你好,原因如下:

为解决频繁的数据插入和更新问题(这些数据的可靠性要求不高,不需要事务),赶上NoMysql的热潮,选择目前最热门的Mongodb,在测试中充分感受到mongodb安装的简单性和客户端调用API的便捷。

但在生产环境下(操作系统CentOS 6.2,内存64G,CPU 12核),却出现频繁的宕机,有时候一天就要宕2次,虽然设置了replica sets,却很容易挂掉2台,导致不可用。

查看mongod.log,发现每次宕机时都会打印Got signal: 11 (Segmentation fault),但从这个查找不到能够解决问题的资料。

有人认为mongodb频繁宕机大多数是因为在并发查询的压力下,因为热数据没有在内存中,被迫到文件系统读取数据,很容易出现timeout的问题,之后会造成进程锁死,经过验证,如果把查询(只有通过主键查一条记录的查询)的客户端关闭掉,宕机的概率小非常多。查看每台mongodb的内存(通过mongodb命令控制台的db.serverStatus()看“mem”部分的“resident”),发现mongodb热数据的内存只占用不到2G,而数据文件有近200G,可能也是因为频繁的宕机,导致热数据一直未全部加载。

但还是会出现宕机,为了不需要人工重启,就在每个replica的服务器上用Linux Shell脚本写了一段每隔1分钟检测mongodb进程死掉自动重启的进程,虽然能够解决mongodb一直在运行的状态,但发现mongodb的collections中出现很多损坏的数据,甚至出现一些自动创建的异常collections,如一个collections的名称是“jingdong”,则会出现多个“ingdong”、"jing"、“jingdon”之类的collections。

不得已只好把mongodb的定时检测启动脚本关闭掉,顺着这个现象找问题,终于在mongodb官网的JIRA看到有个用户反馈的现象跟我们完全一致,最后他解决的方法是把mongodb客户端的java驱动jar包由2.9.1回退至2.8.0,我们也按照这样处理后,果然不会再出现crash问题。

按照常理,把如下命令/usr/local/mongodb/bin/mongod--dbpath=/data/db/--fork--logpath=/data/log/m.log--directoryperdb放在/etc/rc.local文件中就可以实现开机自启动了,第一次重启机器发现mongodb顺利启动了,再次重启机器后,通过ps没有查看到相应mongod进程,也就是启动失败了。原因是由于重启机器,导致非正常停止mongod服务,mongod.lock中还记录了上次运行的进程号,为了数据的安全需要执行/usr/local/mongodb/bin/mongod–repair,当然如果直接把mongod.lock文件删除也可以重新启动了,例如:/usr/local/mongodb/bin/mongod--repair/usr/local/mongodb/bin/mongod--dbpath=/data/db/--fork--logpath=/data/log/m.log--directoryperdb或rm-rf/data/db/mongod.lock/usr/local/mongodb/bin/mongod--dbpath=/data/db/--fork--logpath=/data/log/m.log--directoryperdb注意上述启动Mongodb都是没有增加journal参数,如果带了此参数就不会那么麻烦了,例如/usr/local/mongodb/bin/mongod--dbpath=/data/db/--fork--logpath=/data/log/m.log--directoryperdb--journal就可以了,就算是非正常重启机器,mongodb也会根据日志去修复数据库的。另外,如果mongodb的数据目录是通过mount的NFS文件夹,自启动好像有问题的。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://www.outofmemory.cn/yw/8090880.html



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有